[C] Apaga linha em um Arquivo

Publicado por Enzo de Brito Ferber 06/03/2006

[ Hits: 18.006 ]

Homepage: http://www.maximasonorizacao.com.br

Download apaga.c




Este script apaga a linha "dita" por um
usuário de um arquivo "dito" pelo mesmo.
Código de minha autoria bem comentado
e simples.... ajuda bastante a entender
manipulação de arquivos, aloção
dinamina de memoria, e maniputação de
strings....

  



Esconder código-fonte

/*********************************************************************************************
Programa: apaga.c
Autor: Enzo Ferber 'Slackware_10'
Propósito: Apaga linha definida por usuário em um arquivo
**********************************************************************************************/

#include <stdio.h>
#include <stdlib.h>

int abreArquivo(char arquivo[]){
    FILE *arqEntrada;
    FILE *arqSaida;
    int line = 0;
    int linha = 1;
    int i;
    char textoArquivo[100];
    char *output;
    output = (char *)malloc((strlen(arquivo)+strlen(".editado")) * sizeof(char));
    strcat(output, arquivo);
    strcat(output, ".editado");
    if((arqEntrada = fopen(arquivo, "r")) == 0){ //testa se o arquivo pode ser aberto
        printf("Impossivel abrir arquivo...\n"); //informa o erro
        exit(1); //finaliza execução
    }
    if((arqSaida = fopen(output, "w")) == 0){ //testa se o arquivo pode ser aberto
        printf("Impossivel abrir arquivo...\n"); //informa o erro
        exit(1); //finaliza execução
    }
    printf("Digite a linha a ser apagada no arquivo: "); //pede a linha
    scanf("%d", &line); //le a linha e armazena na variável 'line'
    rewind(arqEntrada); //certifica de que o cursor esta no primeiro caractere do arquivo
    for(i = 0; !feof(arqEntrada);i++){ //incrementa 'i' enquando não for fim de arquivo
       memset(textoArquivo, '{FONTE}', 100); //inicializa e/ou limpa string 'textoArquivo'
        fgets(textoArquivo, 101, arqEntrada); //pega uma string de 100 caracteres
        if(linha == line){ //se a linha for a escolhida
           fputc('\n', arqSaida); //troca a linha que o usuario quer por nova linha
            linha = linha + 1; //incrementa o contador de linhas
            continue; //volta ao inicio do loop sem executar o resto
        }
        linha = linha + 1; //incrementa o contador de linas
        fputs(textoArquivo, arqSaida); //coloca a string 'textoArquivo' no arquivo encoded.txt
    }
    printf("O arquivo output %c: %s\n",233, output);
    free(output); //desaloca espaço alocado para string contendo novo do novo arquivo
    fclose(arqEntrada); //fecha a stream 'arqEntrada'
    fclose(arqSaida); //fecha a stream 'arqSaida'
}

int main(void){ //rotina principal do programa
    char arquivo[100];
    printf("Digite o caminho completo do arquivo: ");
    __fpurge(stdin); //limpa buffer de entrada
    scanf("%[^\n]", arquivo);
    abreArquivo(arquivo); 
}

        
     

Scripts recomendados

Ler config

Copia uma linha selecionada para um arquivo secundário

Números de caracteres em arquivo

Transformando uma sequencia de binário em executável

Codigo para criar arquivo de log


  

Comentários
[1] Comentário enviado por xcolares em 23/06/2010 - 23:51h

Gostaria de saber como faço para ler um arquivo sendo que só o que me interessa nele e a linha que começa com //# e termina também com //# como o exemplo abaixo:
esse é o arquivo, o que quero dele é somente isto:
float Tf=0.058e-6, Tt=500e-6, a1=1.93147180e0/Tf, a2=2.558427881e0/Tt, t0=log(a1/a2)/(a1-a2), Ao=exp(-a1*t0)-exp(-a2*t0), omegao=4.0*atan(1.0)/(3.0*Tf);
for (n=1; n<=nt; n++){
if((n*dt)<=(1.5*Tf)){
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt))*powf((sin(omegao*(float)(n)*dt)),2.0) ;
}else
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt));
}
Se alguém puder me ajudar agradeço.
Adolfo Colares

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const float dt = 4.240384E-10;
nt=t/dt;
float fonte[nt+1];


//############### dados inseridos pelo usuario ###############
float Tf=0.058e-6, Tt=500e-6, a1=1.93147180e0/Tf, a2=2.558427881e0/Tt, t0=log(a1/a2)/(a1-a2), Ao=exp(-a1*t0)-exp(-a2*t0), omegao=4.0*atan(1.0)/(3.0*Tf);
for (n=1; n<=nt; n++){
if((n*dt)<=(1.5*Tf)){
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt))*powf((sin(omegao*(float)(n)*dt)),2.0) ;
}else
fonte[n]= (vmax/Ao)*(exp(-a1*(float)(n)*dt)-exp(-a2*(float)(n)*dt));
}
//############################################################
FILE *fonte_dat=fopen("dats/fonte.dat","w+");
for(n=0;n<=nt;++n){
fprintf(fonte_dat,"%E\n",fonte[n]);
}
fclose(fonte_dat);


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts